/*
 * @(#)cn.design.pattern.template 2020/4/22/0022
 *
 * Copy Right@ 人人译视界
 */


package cn.design.pattern.template;

/**
 * <pre>
 * @author tuwei
 *
 * @version 0.9
 *
 * 修改版本: 0.9
 * 修改日期: 2020/4/22/0022
 * 修改人 :  tuwei
 * 修改说明: 初步完成
 * 复审人 ：
 * </pre>
 */
public abstract class SoyaMilk {
	// 模板方法，make，可以做成final，不让子类去覆盖
	final void make() {
		select();
		if (customerWantCondiments()) {
			addCondiments();
		}
		soak();
		beat();
	}

	// 钩子方法
	boolean customerWantCondiments() {
		return true;
	}

	void select() {
		System.out.println("第一步：选择好的新鲜的黄豆");
	}

	abstract void addCondiments();

	void soak() {
		System.out.println("第三步：黄豆和配料浸泡，需要3个小时");
	}

	void beat() {
		System.out.println("第四步：黄豆和配料放入豆浆机去打");
	}
}